﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business_Entity;
using Business_Logic;

namespace PetSoft.GUI.Ventas
{
    public partial class GUILineaPedidoServicio: Form
    {
    	BELineaPedidoServicio linea;
    	
    	private bool huboCambios;
    	
    	private int modo;
    	private BEPedidoVenta pedidoVenta;
    	
    	public static int MODO_CREAR = 0;
    	public static int MODO_EDITAR = 1;
    	public static int MODO_VER = 2;
    	    	
    	public bool HuboCambios{
    		get{return this.huboCambios;}
    	}
    	
        public GUILineaPedidoServicio(BELineaPedidoServicio linea, int modo, BEPedidoVenta pedidoVenta)
        {
        	try{
	            InitializeComponent();
	            
	            huboCambios = false;
	            
	            this.pedidoVenta = pedidoVenta;

	            this.linea = linea;
	            this.modo = modo;
	            
	            if (modo == MODO_CREAR){
	            	tipoDeCitaCB.Enabled = true;
	            	servicioCB.Enabled = true;
	            	fechaDTP.Enabled = true;
	            }
	            
	            if (linea == null){
	            	this.linea = new BELineaPedidoServicio();
	            	this.linea.Id = -1;
	            }else{
	            	fechaDTP.Value = linea.Fecha;
	            	mascotaTB.Text = linea.Mascota.Nombre;
	            	personaACargoTB.Text = linea.Empleado.Nombre+" "+linea.Empleado.ApPaterno;
	            	precioTB.Text = linea.Precio.ToString();
	            	
	            	if (modo == MODO_EDITAR){
	            		fechaDTP.Enabled = true;
	            		servicioCB.Enabled = true;
	            		tipoDeCitaCB.Enabled = true;
	            		
	            	}
	            	
	            }
	            
	            cargarTiposServicio();
        	}catch(Exception ex){
        		Utils.MessageError("Error al construir la ventana.", ex);
        	}
                        
        }
        
        private void cargarTiposServicio(){
        	try{
	        	BLServicio bl = new BLServicio();
	        	List<BETipoServicio> tiposServicio = bl.getTipoServicio();
	        	
	        	tipoDeCitaCB.DataSource = tiposServicio;
	        	tipoDeCitaCB.DisplayMember = "Nombre";
	        	tipoDeCitaCB.SelectedIndex = 0;
	        	
	        	if (modo != MODO_CREAR){
		        	for (int i=0; i<tiposServicio.Count; i++){
	        			if (tiposServicio[i].Id == linea.Servicio.Tipo.Id){
	        				tipoDeCitaCB.SelectedIndex = i;
	        				break;
	        			}
		        	}
	        		
	        		//seleccionar el servicio de la cita (ya registrada porque no
	        		//estamos en CREAR)
	        		List<BEServicio> servs = bl.getServicios(linea.Servicio.Tipo);
	        		servicioCB.DataSource = servs;
	        		servicioCB.DisplayMember = "Nombre";
	        		servicioCB.SelectedIndex = 0;
	        		for(int i=0; i<servs.Count; i++){
	        			if(servs[i].Codigo == linea.Servicio.Codigo){
	        				servicioCB.SelectedIndex = i;
	        				break;
	        			}
	        		}
	        		
	        	}
        	}
        	catch(Exception ex){
        		MessageBox.Show("Error al cargar los tipos de servicio.\n"+ex);
        	}
        }

        private void buscarMascotaBTN_Click(object sender, EventArgs e)
        {
        	try{
        		/*
	            GUIBuscarMascota GBuscarMascota = new GUIBuscarMascota();
	            GBuscarMascota.ShowDialog(this);
	            */
	           //MessageBox.Show("Buscando mascota");
	           //MessageBox.Show("id cliente "+pedidoVenta.Cliente.Id);
	           
	           	GUICliente v = new GUICliente(pedidoVenta.Cliente,3);
	           	//v.deshabilitarTabClientes();
	           	//v.seleccionarTabMascotas();
	           	v.ShowDialog(this);
				
	           	if (v.MascotaSeleccionada == null){
	           		return;
	           	}
	           	
	            linea.Mascota = v.MascotaSeleccionada;
	            
	            mascotaTB.Text = linea.Mascota.Nombre;
        	}catch(Exception ex){
        		Utils.MessageError("Error al buscar mascota.", ex);
        	}
        }

        private void buscarEmpleadoBTN_Click(object sender, EventArgs e)
        {
        	try{
        		
        		if (linea.Mascota == null){
        			Utils.MessageAviso("Primero seleccionar una mascota.");
        			return;
        		}
        		
        		if (servicioCB.SelectedIndex == 0){
        			Utils.MessageAviso("Primero seleccionar un servicio.");
        			return;
        		}
        		
        		RRHH.GUIBuscarEmpleadoServicio v = new RRHH.GUIBuscarEmpleadoServicio();
        		
        		v.Fecha = getFecha();
        		v.Hora = getFecha();
        		v.Servicio = servicioCB.SelectedValue as BEServicio;
	            
        		//RRHH.GUIBuscarEmpleado v = new RRHH.GUIBuscarEmpleado();
        		
	            v.ShowDialog(this);
	            
	            if (v.Empleado != null){
	            	this.linea.Empleado = v.Empleado;
	            	personaACargoTB.Text = v.Empleado.Nombre + " " + v.Empleado.ApPaterno;
	            	this.fechaDTP.Value = v.Fecha;
	            }
	            	            
        	}catch(Exception ex){
        		Utils.MessageError("Error al buscar empleado.", ex);
        	}
        }
        
        private DateTime getFecha(){

    		DateTime fecha = fechaDTP.Value;
    		return fecha;
        }
        
        void AceptarBTNClick(object sender, EventArgs e)
        {
        	try{
        		
        		if(!Utils.MessagePregunta("¿Realmente desea guardar los cambios?")){
        			return;
        		}
        		
        		if (linea.Mascota == null){
        			Utils.MessageAviso("Seleccionar una mascota.");
        			return;
        		}
        		if (linea.Empleado == null){
        			Utils.MessageAviso("Seleccionar un empleado a cargo.");
        			return;
        		}
        		if (linea.Servicio == null){
        			Utils.MessageError("Seleccionar un servicio.");
        			return;
        		}        		
        		
        		linea.Fecha = getFecha();
	        	
	        	if (modo == MODO_CREAR){
	        		linea.Estado = new BEEstadoAtencion(1, "Registrado");
	        	}
		        
	        	try{
	        		linea.Precio = double.Parse(precioTB.Text);
	        	}catch(Exception ex){
	        		Utils.MessageAviso("El precio no es válido");
	        		return;
	        	}
        		       		
	        	linea.Tienda = BLInfo.tiendaActual;
	        	
	        	String msgError = BLPedidoVenta.sePuedeAgregarCita(linea, pedidoVenta.LineasPedidoServicio);
	        	if (msgError == ""){
	        			        	
		        	this.huboCambios = true;
		        	this.Close();
	        	
	        	}else{
	        		Utils.MessageError(msgError);
	        	}
	        		        	
        	}catch(Exception ex){
        		Utils.MessageError("Error al guardar los cambios.", ex);
        	}
        	
        }
        
        public BELineaPedidoServicio LineaPedidoServicio{
        	get{return this.linea;}
        }

        void GUILineaPedidoServicioLoad(object sender, EventArgs e)
        {
        	fechaDTP.Enabled = false;
        }
        
        void BuscarServicioGBEnter(object sender, EventArgs e)
        {
        	
        }
        
        void TipoDeCitaCBSelectedIndexChanged(object sender, EventArgs e)
        {
        	try{
	        	BLServicio bl = new BLServicio();
	        	List<BEServicio>listaServ = bl.getServicios((BETipoServicio)tipoDeCitaCB.SelectedValue);
	        	
	        	servicioCB.DataSource = listaServ;
				servicioCB.DisplayMember = "Descripcion";
	
				servicioCB.SelectedIndex = 0;
				
				if (modo != MODO_CREAR){
		        	for (int i=0; i<listaServ.Count; i++){
	        			if (listaServ[i].Codigo == linea.Servicio.Codigo){
	        				tipoDeCitaCB.SelectedIndex = i;
	        				break;
	        			}
		        	}
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("Error al cargar servicios.", ex);
        	}
        	
        }
        
        void ServicioCBSelectedIndexChanged(object sender, EventArgs e)
        {
        	try{
	        	BEServicio servicio = servicioCB.SelectedValue as BEServicio;
	        	if (servicio.Codigo != -1){
	        		linea.Servicio = servicio;
	        		precioTB.Text = servicio.Precio.ToString();
	        		if (servicio.Precio < 0){
	        			precioTB.Text = "";
	        		}
	        	}else{
	        		precioTB.Text = "";
	        	}
        	}catch(Exception ex){
        		Utils.MessageError("Error al seleccionar servicio.");
        	}
        }
        
        void GUILineaPedidoServicioFormClosing(object sender, FormClosingEventArgs e)
        {
        	
        }
        
        void FechaDTPValueChanged(object sender, EventArgs e)
        {
        	try{
        		Utils.dateMayorQueNow(sender, e);
        	}catch(Exception ex){
        		Utils.MessageError("Error al validar fecha.", ex);
        	}
        }
    }
}
